package com.allwees.bs.module.pms.req;

import com.allwees.bs.core.modelbase.branch.EBranchType;
import com.allwees.bs.core.modelbase.exception.AuthException;
import com.allwees.bs.core.modelbase.exception.AuthExceptionEnum;
import com.allwees.bs.core.modelbase.validate.Validatable;
import com.allwees.bs.core.modelbase.validate.ValidateItem;
import com.allwees.bs.module.pms.entity.Sku;
import com.allwees.core.common.util.MoneyUtil;
import com.allwees.core.common.util.http.RequestContext;
import com.allwees.core.common.util.reflect.PojoUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.ResourceBundle;

@Data
@EqualsAndHashCode(callSuper = true)
public class SkuReq extends Sku implements Validatable {
    public ValidateItem[] getValidateItems(EBranchType branchType) {
		ResourceBundle rb = RequestContext.getContext().getResourceBundle();
		return ArrayUtils.addAll(
	        new ValidateItem[] {
					new ValidateItem(StringUtils.isBlank(getCustomNo()), rb.getString("validator.sku_not_null")),
					new ValidateItem(getCustomNo() != null && getCustomNo().length() > 64, rb.getString("validator.sku_custom_no_too_long")),
	                new ValidateItem(StringUtils.isBlank(getColor()), rb.getString("validator.sku_color_not_null")),
	                new ValidateItem(StringUtils.isBlank(getSize()), rb.getString("validator.sku_size_not_null")),
	                new ValidateItem(getWeight() == null || getWeight() < 1, rb.getString("validator.sku_weight_not_valid")),
	                new ValidateItem(StringUtils.isBlank(getWeightUnit()), rb.getString("validator.sku_weight_unit_not_null")),
	                new ValidateItem(getQuantity() == null || getQuantity() < 1, rb.getString("validator.sku_quantity_unit_not_valid")),
					new ValidateItem(MoneyUtil.equals(getShippingPrice(),getRetailPrice()) && MoneyUtil.equals(getShippingPrice(), BigDecimal.ZERO), rb.getString("validator.sku_retail_price_shipping_fee_not_valid"))
	        },
	        getValidateItem4BranchType(branchType)
	    );
    }

	private ValidateItem[] getValidateItem4BranchType(EBranchType branchType) {
		ResourceBundle rb = RequestContext.getContext().getResourceBundle();
		switch(branchType) {
			case RETAILER:
				return new ValidateItem[] {
		                new ValidateItem(getOriginalPrice() == null, rb.getString("validator.sku_original_price_not_valid")),
		                new ValidateItem(getRetailPrice() == null, rb.getString("validator.sku_retail_price_not_valid")),
		                new ValidateItem(StringUtils.isBlank(getShippingCurrency()), rb.getString("validator.sku_shipping_currency_not_null")),
		                new ValidateItem(getShippingPrice() == null, rb.getString("validator.sku_shipping_fee_not_valid"))
					};
			case SUPPLIER:
//				return new ValidateItem[] {
//		                new ValidateItem(getAlarmQuantity() == null || getAlarmQuantity() < 1, "SKU库存预警值不合法"),
//		                new ValidateItem(!MoneyUtil.isValidPrice(getSupplyPrice()), "SKU供货价不合法")
//					};
			case STORE:
				return new ValidateItem[0];
			default:
				throw new AuthException(AuthExceptionEnum.WRONG_BRANCH_TYPE);
		}
	}

    public Sku toSku(){
        return PojoUtil.copy(new Sku(), this);
    }
}
